Hibernate একটি জনপ্রিয় Object-Relational Mapping (ORM) ফ্রেমওয়ার্ক যা ডেটাবেসের সাথে যোগাযোগের জন্য caching mechanisms সরবরাহ করে। Query Cache এবং Hibernate Caching Strategy ডেটাবেসের পারফরম্যান্স বৃদ্ধি করতে এবং ডেটাবেস থেকে বারবার একই ডেটা পুনরুদ্ধার করার সময় কম লোড তৈরি করতে সহায়ক। Hibernate বিভিন্ন স্তরের ক্যাশিং (caching) সাপোর্ট করে, যা ডেটাবেসের পারফরম্যান্সে যথেষ্ট উন্নতি করতে পারে।
1. Hibernate Caching Overview
Hibernate-এর ক্যাশিং two levels এ কাজ করে:
- First-level cache (Session Cache):
- Session-level cache একটি automatic cache যা Hibernate Session এর মাধ্যমে পরিচালিত হয়। যখন একটি Session তৈরি করা হয়, তখন এটি সেই session এর জন্য ডেটা ক্যাশ করে রাখে।
- এটি enabled থাকে এবং manual configuration প্রয়োজন হয় না।
- First-level cache ব্যবহৃত হয় যখন একটি
Sessionএর মধ্যে কোনো ডেটা খোঁজা হয়। একবার একটি entity ফেচ করা হলে, পরবর্তী খোঁজগুলির জন্য এটি একই Session এর মধ্যে ক্যাশ থেকে সরবরাহ করা হয়।
- Second-level cache (SessionFactory Cache):
- SessionFactory-level cache হল একটি shared cache যা Hibernate SessionFactory এর মাধ্যমে ব্যবস্থাপিত হয়। এটি ডেটাবেসের আউটসাইডে ডেটা সংরক্ষণ করে, তাই একাধিক সেশন থেকে অ্যাক্সেস করা যায়।
- Second-level cache সাধারণত external caching providers (যেমন Ehcache, Infinispan, OSCache) এর সাথে কাজ করে। এই ক্যাশটি টেবিল বা entity এর জন্য ব্যবহৃত হয় এবং এটি manual configuration এর মাধ্যমে সক্রিয় করা হয়।
- Query Cache:
- Query Cache একটি second-level cache এর অধীনে কাজ করে, যা SQL queries এর জন্য ব্যবহৃত হয়। এটি ক্যাশে query result sets সংরক্ষণ করে, যাতে একটি নির্দিষ্ট query একাধিক বার রান না করতে হয়।
- Query cache ডেটাবেসে ফেচ করা ফলাফলগুলি ক্যাশ করে রাখে, এবং যখন একই query আবার চালানো হয়, তখন ডেটাবেস থেকে পুনরুদ্ধারের পরিবর্তে ক্যাশ থেকে ফলাফল পাওয়া যায়।
2. Hibernate Caching Strategy
Hibernate এর caching strategy ডেটার সঠিক অ্যাক্সেস এবং সংশ্লেষণের জন্য বিভিন্ন স্তরের ক্যাশিং ব্যবহার করে। Hibernate এ কিছু ক্যাশিং স্ট্র্যাটেজি আছে:
First-level Cache (Session Cache):
- Automatic: Hibernate দ্বারা তৈরি Session এ এই ক্যাশটি নিজে থেকেই সক্রিয় থাকে।
- Scope: একটি Session এর মধ্যে এর প্রভাব সীমাবদ্ধ থাকে।
- Usage: Session এর মধ্যে যে কোনো entity বা object প্রথমবার ফেচ করা হলে সেটি ক্যাশে রাখা হয় এবং পরবর্তী ফেচের জন্য ডেটাবেসে আবার যেতে হয় না।
Second-level Cache:
- Manual Configuration: দ্বিতীয় স্তরের ক্যাশ সক্রিয় করতে Hibernate এর configuration ফাইলে সেটিংস করতে হয়।
- Cache Providers: Hibernate এর সাথে কিছু জনপ্রিয় cache providers ব্যবহার করা যেতে পারে যেমন Ehcache, Infinispan এবং OSCache।
- Usage: এই ক্যাশটি বিভিন্ন session এর মধ্যে শেয়ার করা যায় এবং একাধিক session থেকে পুনরায় ব্যবহৃত হতে পারে।
Query Cache:
- Works with Second-Level Cache: Query Cache মূলত second-level cache এর মধ্যে একটি অংশ এবং এটি query results ক্যাশ করে।
- Manual Configuration: Query cache ব্যবহারের জন্য এটি সক্রিয় করতে হবে এবং কিছু query এর জন্য ক্যাশিং সক্ষম করা হয়।
3. Query Cache Configuration and Usage in Hibernate
Hibernate এ Query Cache ব্যবহারের জন্য আপনাকে কিছু সেটিংস কনফিগার করতে হবে এবং কিছু নির্দিষ্ট queries ক্যাশে রাখতে হবে।
Step 1: Enable Second-Level Cache and Query Cache
প্রথমে, Hibernate configuration ফাইলে second-level cache এবং query cache সক্রিয় করতে হবে। নিচে এর একটি উদাহরণ দেওয়া হল।
<hibernate-configuration>
<session-factory>
<!-- Enable second-level cache -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- Enable query cache -->
<property name="hibernate.cache.use_query_cache">true</property>
<!-- Set cache provider (Ehcache example) -->
<property name="hibernate.cache.region.factory_class">
org.hibernate.cache.ehcache.EhCacheRegionFactory
</property>
<!-- Cache settings for Ehcache -->
<property name="hibernate.cache.provider_configuration_file_resource_path">/ehcache.xml</property>
</session-factory>
</hibernate-configuration>
এখানে, hibernate.cache.use_query_cache প্রপার্টি true সেট করা হয়েছে, যাতে query cache সক্রিয় হয়।
Step 2: Enable Query Cache for Specific Queries
আপনি নির্দিষ্ট HQL (Hibernate Query Language) বা Criteria API queries এর জন্য ক্যাশিং সক্রিয় করতে পারেন।
Example: Query Cache with HQL:
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateApp {
public static void main(String[] args) {
// Create SessionFactory
SessionFactory factory = new Configuration().configure("hibernate.cfg.xml").addAnnotatedClass(Employee.class).buildSessionFactory();
Session session = factory.getCurrentSession();
try {
// Begin transaction
session.beginTransaction();
// Create HQL query
Query<Employee> query = session.createQuery("from Employee where department = :department", Employee.class);
query.setParameter("department", "IT");
// Enable query cache
query.setCacheable(true);
// Execute the query and get results from cache or database
List<Employee> employees = query.getResultList();
for (Employee emp : employees) {
System.out.println(emp.getName());
}
// Commit transaction
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
Explanation:
query.setCacheable(true): এটি query cache কে সক্ষম করে, এবং query result যদি ক্যাশে থাকে, তবে এটি ডেটাবেস থেকে পুনরুদ্ধারের পরিবর্তে ক্যাশ থেকে সরবরাহ করা হবে।
4. Hibernate Caching Providers
Hibernate বিভিন্ন caching providers ব্যবহার করে second-level cache এবং query cache এর কার্যকারিতা বৃদ্ধি করতে পারে। কিছু জনপ্রিয় cache providers হল:
- Ehcache:
- এটি সবচেয়ে জনপ্রিয় এবং open-source cache provider। Hibernate এর সাথে একত্রে ব্যবহার করা সহজ।
- Infinispan:
- এটি একটি distributed caching solution যা transactional এবং non-transactional cache হিসেবে ব্যবহার করা যেতে পারে।
- OSCache:
- এটি একটি lightweight cache provider যা Java applications এর জন্য ব্যবহৃত হয়।
5. Advantages of Query Cache in Hibernate
- Performance Boost: একাধিক বার একই query চালানোর সময়, ক্যাশ থেকে ডেটা পুনরুদ্ধার করা হয়, যা ডেটাবেসে বারবার কল করার পরিবর্তে পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে।
- Reduction in Database Load: ক্যাশে থাকা ফলাফলগুলি ব্যবহৃত হলে, ডেটাবেসে নতুন করে তথ্য চাওয়ার প্রয়োজন নেই, যা ডেটাবেস সার্ভারের লোড কমিয়ে দেয়।
- Efficient Use of Resources: কম পুনরাবৃত্তি database queries এর মাধ্যমে resources ব্যবহারের দক্ষতা বাড়ায়।
- Query Cache এবং Hibernate Caching Strategies Hibernate-এ পারফরম্যান্স উন্নত করার জন্য অত্যন্ত গুরুত্বপূর্ণ। Second-level cache এবং query cache ব্যবহার করলে ডেটাবেসের লোড কমানো যায় এবং একই query results বারবার ডেটাবেস থেকে পুনরুদ্ধার করা থেকে বিরত থাকা যায়।
- Hibernate ক্যাশিংয়ের মাধ্যমে Ehcache, Infinispan এবং OSCache সহ বিভিন্ন cache providers ব্যবহার করা যেতে পারে, যা Hibernate এর কার্যকারিতা এবং স্কেলেবিলিটি উন্নত করে।
Query Cache এবং second-level cache এর মাধ্যমে Hibernate আপনাকে ডেটাবেসের কাজের গতি উন্নত করতে সহায়ক ফিচার প্রদান করে, বিশেষ করে যখন আপনার অ্যাপ্লিকেশন ডেটাবেসে প্রচুর read-heavy operations সম্পাদন করে।
Read more